1.1. 字符流

字符流只能操作文本文件,不可操作图片。

img
Image

2. 字符流的父类(抽象类)

  • Reader:字符输入流

    • public int read()

      从流中读取单个字符,用整型来返回读取的字符;当读到流底部时返回-1。

    • public int read(char[] c)

      从流中读取字符保存到c数组中,返回读取的字符个数,当读到流底部时返回-1。

    • public int read(char[] cbuf,int off,int len){}

      抽象方法。

  • Writer:字符输出流

    • public void write(int n)

      写入单个字符,只能写入包含16位低阶字节的整型数值,16位高阶字节将会被忽略。

    • public void write(String str)

      写入一个字符串。

    • public void write(char[] cbuf)

      写入一个字符数组。

3. 字符流的子类

  • FileReader:

    • public int read()

      继承自InputStreamReader类。读取单个字符,返回读取的字符,当读到流底部时返回-1。

    • public int read(char[] c)

      继承自Reader类。

    • public int read(char[] cbuf,int offset,int length)

      继承自InputStreamReader类。从流中读取部分字符到cbuf中指定位置,返回读取到的字符个数,当读到流底部时返回-1。

String path = "/Users/admin/Downloads/data.txt";

FileReader fr = new FileReader(path);

// 读取单个字节
//        int data = 0;
//        while ((data = fr.read()) != -1) {
//            System.out.print((char) data);
//        }s

// 读取多个字节
char[] data = new char[1024];
int count = 0;
while ((count = fr.read(data)) != -1) {
  System.out.println(new String(data, 0, count));
}

fr.close();

FileWriter:

  • public void write(int c)

    继承自OutputStreamWriter类,写入一个字符。

  • public void write(String str)

    继承自Writer类。

  • public void Write(char[] cbuf)

    继承自Writer类。

String path = "/Users/admin/Downloads/data.txt";

FileWriter fw = new FileWriter(path);

for (int i = 0; i < 10; i++) {
  fw.write("Java是世界上最好的语言\r\n");
  fw.flush();
}
fw.close();

4. 案例

String path = "/Users/admin/Downloads/data.txt";
String path1 = "/Users/admin/Downloads/data1.txt";

FileReader fr = new FileReader(path);
FileWriter fw = new FileWriter(path1);

int data = 0;
while ((data = fr.read()) != -1) {
  fw.write(data);
}

fr.close();
fw.close();

4.1. 字符缓冲流

  • 缓冲流:BufferedReader/BufferedWriter
    • 高效读写
    • 支持换行输入符
    • 可一次写一行、读一行。
  • 常用方法
    • readLine()读取一行的内容
    • newLine()写入一个换行符,换行符的内容由操作系统给定。其中,Windows系统为\r\n,Unix/Linux系统为\n

使用字符缓冲流读取文件

String path = "/Users/admin/Downloads/data.txt";

FileReader fileReader = new FileReader(path);
BufferedReader bufferedReader = new BufferedReader(fileReader);

// 按字符读取
//        char[] chars = new char[1024];
//        int count = 0;
//        while ((count = bufferedReader.read(chars)) != -1) {
//            System.out.println(new String(chars, 0, count));
//        }

// 按行读取
String str = null;
while ((str = bufferedReader.readLine()) != null) {
  System.out.println(str);
}

bufferedReader.close();

使用字符缓冲流写入文件

String path = "/Users/admin/Downloads/data.txt";

FileWriter fw = new FileWriter(path);
BufferedWriter bw = new BufferedWriter(fw);

for (int i = 0; i < 10; i++) {
  bw.write("好好学习,天天向上");
  bw.newLine();   // 新增一个换行符
  bw.flush();
}

bw.close();

4.2. 打印流

  • PrintWriter:
    • 封装了print()/println()方法,支持写入后换行。
    • 支持数据原样打印。
String path = "/Users/admin/Downloads/data.txt";


PrintWriter printWriter=new PrintWriter(path);
//打印到文件
printWriter.println(97);//97
printWriter.println('b');//b
printWriter.println(3.14);//3.14
printWriter.println(true);//true

printWriter.close();

4.3. 转换流

  • 桥转换流:InputStreamReader/OutputStreamWriter
    • 可将字节流转换为字符流。
    • 可设置字符的编码方式。
String path = "/Users/admin/Downloads/data.txt";

FileInputStream fis = new FileInputStream(path);
InputStreamReader ism = new InputStreamReader(fis, "utf-8");

char[] chars = new char[1024];
int count = 0;
while ((count = ism.read(chars))!= -1){
  System.out.println(new String(chars, 0, count));
}

ism.close();
String path = "/Users/admin/Downloads/data.txt";

FileOutputStream fos = new FileOutputStream(path);
OutputStreamWriter osw = new OutputStreamWriter(fos, "gbk");

for (int i = 0; i < 10; i++) {
  osw.write("hello, world!\r\n");
  osw.flush();
}
osw.close();
Copyright © rootwhois.cn 2021-2022 all right reserved,powered by GitbookFile Modify: 2023-03-05 10:55:52

results matching ""

    No results matching ""